package net.qiqbframework.common.dto;


/**
 * 统一的web 请求响应格式。
 *
 * @param <T>
 */
public class WebRespDto<T> extends ResultDto<T> {
    /**
     * 请求全局唯一id
     */
    private String traceId;

    /**
     * 请求有错误时，前端对 errorMessage 的处理方式：： 0 默认不处理; 1 警告消息提示; 2 错误消息提示; 4 通知; 9 错误页面提示
     */
    private int errorShowType;

    /**
     * 额外信息
     * 详情信息，提供问题排查使用。
     * 在开发和测试环境开启
     */
    private String debugMessage;

    private WebRespDto(T data) {
        super(data);
    }

    public int getErrorShowType() {
        return errorShowType;
    }

    public WebRespDto<T> setErrorShowType(int showType) {
        this.errorShowType = showType;
        return this;
    }

    public String getDebugMessage() {
        return debugMessage;
    }

    public WebRespDto<T> setDebugMessage(String debugMessage) {
        this.debugMessage = debugMessage;
        return this;
    }

    public static WebRespDto<?> buildFailure(String errCode, String errMessage, int errorShowType) {
        WebRespDto response = new WebRespDto(null);
        response.setSuccess(false);
        response.setCode(errCode);
        response.setMessage(errMessage);
        response.setErrorShowType(errorShowType);
        return response;
    }

    public static <T> WebRespDto<T> buildSuccess(T data, int errorShowType) {
        WebRespDto<T> response = new WebRespDto<>(data);
        response.setSuccess(true);
        response.setData(data);
        response.setErrorShowType(errorShowType);
        return response;
    }

    public static WebRespDto<?> buildSuccess() {
        WebRespDto<?> response = new WebRespDto<>(null);
        response.setSuccess(true);
        return response;
    }
}
